package com.zjmzxfzhl.integrityconstraint.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 验证信息
 *
 * @author 庄金明
 */
@Target(value = {ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface VerifyAnnotation {

    /**
     * 验证类型静态数据值,若type有值则优先取type
     */
    String type() default "";

    /**
     * 验证类型表达式,若type有值则优先取type
     * operationType=chek时,暂不支持该属性
     */
    String typeExpression() default "";

    /**
     * 验证类型检查条件表达式
     * 若为 null 或 空字符串，默认需要保存/需要校验
     */
    String conditionExpression() default "";

    /**
     * 数据来源表达式,最终以 HashMap 形式存入缓存,
     * 若有 -> 表示存入的 key 为 -> 后的字符串
     * 若无 -> 表示存入的 key 为最后一个 . 后的字符串
     * 若以 , 隔开表示需要存储多个值
     * examples
     * 1. #paramName 取参数名为 paramName的值, key为 paramName
     * 2. #paramName->otherParamName 取参数名为 paramName的值, key为 otherParamName
     * 2. #someParam.paramName 取参数名 someParam 的属性 paramName的值, key为 paramName
     * 3. #someParam.paramName->otherParamName 取方法参数名 someParam 的属性 paramName的值，key为 otherParamName
     */
    @Deprecated
    String valuesExpression() default "";

    ValueAnnotation[] values() default {};
}
